﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using WindowsFormApplication.FormBase;
using WindowsFormsView;
using WindowsFormsPresenter.InventoryItemCategory;
using WindowsFormsModel.BusinessObjects;
using Utils;

namespace WindowsFormApplication.FormCategoryTree
{
    public partial class frmMaterialCategoryDetail : frmBaseTreeDetail, IInventoryItemCategoryView, IInventoryItemCategoriesView
    {
        #region Presenter

        private InventoryItemCategoryPresenter _inventoryItemCategoryPresenter;
        private InventoryItemCategoriesPresenter _inventoryItemCategoriesPresenter;

        #endregion

        #region Field

        public IList<InventoryItemCategoryModel> InventoryItemCategories
        {
            set
            {
                var inventoryItemCategories = value;

                cboParentID.DataSource = inventoryItemCategories;
                cboParentID.DisplayMember = "InventoryCategoryName";
                cboParentID.ValueMember = "InventoryCategoryID";

                for (int i = 0; i < cboParentID.DisplayLayout.Bands[0].Columns.Count; i++)
                {
                    cboParentID.DisplayLayout.Bands[0].Columns[i].Hidden = true;
                }

                cboParentID.DisplayLayout.Bands[0].Columns["InventoryCategoryCode"].Hidden = false;
                cboParentID.DisplayLayout.Bands[0].Columns["InventoryCategoryName"].Hidden = false;

                cboParentID.DisplayLayout.Bands[0].Columns["InventoryCategoryCode"].Header.Caption = "Mã loại nguyên liệu";
                cboParentID.DisplayLayout.Bands[0].Columns["InventoryCategoryName"].Header.Caption = "Tên loại nguyên liệu";
            }
        }

        public string InventoryCategoryID { get; set; }

        public string InventoryCategoryCode
        {
            get { return txtInventoryCategoryCode.Text; }
            set { txtInventoryCategoryCode.Text = value; }
        }

        public string InventoryCategoryName
        {
            get { return txtInventoryCategoryName.Text; }
            set { txtInventoryCategoryName.Text = value; }
        }

        public string ParentID
        {
            get
            {
                if ((chkIsParent.Checked == false) && (cboParentID.Value != null))
                {
                    return cboParentID.Value.ToString();
                }
                else { return null; }
            }
            set { cboParentID.Value = value; }
        }

        public bool IsParent
        {
            get { return chkIsParent.Checked; }
            set
            {
                chkIsParent.Checked = value;
                if (chkIsParent.Checked == true) { cboParentID.ReadOnly = true; cboParentID.Value = null; }
                else { cboParentID.ReadOnly = false; }
            }
        }

        public bool IsMaterial { get { return true; } set { value = true; } }

        public string RestaurantID { get; set; }

        public string Description
        {
            get { return txtDescription.Text; }
            set { txtDescription.Text = value; }
        }

        public bool IsActive
        {
            get { return chkIsActive.Checked; }
            set { chkIsActive.Checked = value; }
        }

        #endregion

        protected override void InitData()
        {
            _inventoryItemCategoryPresenter = new InventoryItemCategoryPresenter(this);
            _inventoryItemCategoriesPresenter = new InventoryItemCategoriesPresenter(this);

            _inventoryItemCategoriesPresenter.Display(IsMaterial);
            if (KeyValue != null)
                _inventoryItemCategoryPresenter.Display(KeyValue);
        }

        protected override bool ValidData()
        {
            if (string.IsNullOrEmpty(InventoryCategoryCode))
            {
                ShowMessageBox("Bạn chưa nhập mã loại nguyên liệu !", "Thông báo nhập sai dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtInventoryCategoryCode.Focus();
                return false;
            }
            if (string.IsNullOrEmpty(InventoryCategoryName))
            {
                ShowMessageBox("Bạn chưa nhập tên loại nguyên liệu !", "Thông báo nhập sai dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtInventoryCategoryName.Focus();
                return false;
            }
            if ((chkIsParent.Checked == false) && (cboParentID.Value == null))
            {
                ShowMessageBox("Bạn chưa nhập loại nhà cung cấp cha !", "Thông báo nhập sai dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cboParentID.Focus();
                return false;
            }
            if (eActionMode == ActionMode.Edit)
            {
                if (chkIsParent.Checked == false)
                {
                    if (cboParentID.Value.ToString().Equals(InventoryCategoryID))
                    {
                        ShowMessageBox("Bạn mã loại cha không hợp lệ !", "Thông báo nhập sai dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        cboParentID.Value = null;
                        cboParentID.Focus();
                        return false;
                    }
                }
            }
            return true;
        }

        protected override bool SaveData()
        {
            try
            {
                if (eActionMode == ActionMode.AddNew)
                {
                    _inventoryItemCategoryPresenter.Save();
                    ShowMessageBox("Thêm mới dữ liệu thành công !", "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    _inventoryItemCategoryPresenter.Save();
                    ShowMessageBox("Sửa dữ liệu thành công !", "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (ApplicationException ex)
            {
                ShowMessageBox(ex.Message, "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            return true;
        }

        public frmMaterialCategoryDetail()
        {
            InitializeComponent();
        }

        private void chkIsParent_CheckedChanged(object sender, EventArgs e)
        {
            if (chkIsParent.Checked.ToString().AsBool() == true)
            {
                cboParentID.Value = null;
                cboParentID.ReadOnly = true;
            }
            else
                cboParentID.ReadOnly = false;
        }
    }
}
